# -*- coding: utf-8 -*-

# 这个文件夹用来封装一些常用的操作方法

from cryptography.hazmat.primitives.asymmetric import ec
from pycparser.ply.yacc import resultlimit
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait


class WebKeys:
    #【浏览器实例化】  __init__ 初始化对象  只要实例化WebKeys  就会走到__init__打开浏览器
    def __init__(self,driver):
        self.driver = driver
        #这个是封装显示等待最大等待时间是10秒  元素定位
        self.wait = WebDriverWait(self.driver, 10)

    #【访问不同的网址】   封装driver.get(url）
    def open(self,url):
        self.driver.get(url)

    #【显示等待元素定位】   传俩个参数  找到定位元素要返回出去 后面的点击和输入操作
    def locator_with_wait(self,name,value):
    # 线性写法WebDriverWait(driver,10).until(
    # ec.presence_of_element_located(
    #     (By.XPATH,'//input[@id="login-type_phone"]'))).send_keys("13465004020")
        locator=(name,value)
        el=self.wait.until(ec.visibility_of_element_located(locator))
        return el

    #【加边框】  自动化操作时加上边框  方便看见  大小是2px 边框颜色是绿色
    def locator_station(self,element):
        self.driver.execute_script(
            "arguments[0].setAttribute('readonly', arguments[1]);",
            element,
            "borser:2px solid green;"
        )

    #【窗口切换】
    def change_window(self,n):
        #获取全部窗口
         handles=self.driver.window_handles
        #切换窗口 n代表下标 最新的窗口是-1
         self.driver.switch_to.window(handles[n])

    #【断言】  获取元素信息 拿到文本值进行返回  后面还要进行断言操作
    def text_wait(self,name,value,txt):
        el = (name,value)
        result = self.wait.until(ec.text_to_be_present_in_element(el, txt))
        return result

    #【获得结果】 通过文本去拿取结果
    def text_wait(self,name,value,txt):
        el = (name,value)
        result = self.wait.until(ec.text_to_be_present_in_element(el, txt))
        return result

    #【获得文本内容结果】  通过定位去拿取结果
    def get_txt(self,name,value):
        el = (name,value)
        result = self.wait.until(ec.visibility_of_element_located(el)).txt
        return result

